#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Web版数据库初始化脚本

简化版本，专为FastAPI Web应用设计
"""

import os
import sys
import asyncio
import logging
from pathlib import Path

# 设置环境变量
os.environ.setdefault('SECRET_KEY', 'crm-development-secret-key-change-in-production-minimum-32-chars')
os.environ.setdefault('DEBUG', 'true')
os.environ.setdefault('DATABASE_URL', 'sqlite+aiosqlite:///./data/crm.db')

# 确保数据目录存在
data_dir = Path('./data')
data_dir.mkdir(exist_ok=True)

# 设置日志
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)

async def init_database():
    """初始化数据库"""
    try:
        from src.data.models import Base
        from src.web.core.database import init_database as web_init_db
        from sqlalchemy.ext.asyncio import create_async_engine
        
        logger.info("🚀 开始初始化Web数据库...")
        
        # 创建数据库引擎
        engine = create_async_engine(
            "sqlite+aiosqlite:///./data/crm.db",
            echo=True
        )
        
        # 创建所有表
        async with engine.begin() as conn:
            await conn.run_sync(Base.metadata.create_all)
        
        logger.info("✅ 数据库表创建成功")
        
        # 关闭引擎
        await engine.dispose()
        
        logger.info("✅ 数据库初始化完成！")
        return True
        
    except Exception as e:
        logger.error(f"❌ 数据库初始化失败: {e}")
        import traceback
        traceback.print_exc()
        return False

async def test_database():
    """测试数据库连接"""
    try:
        from src.web.core.database import init_database, close_database
        
        logger.info("🔍 测试数据库连接...")
        
        # 初始化数据库连接
        await init_database()
        logger.info("✅ 数据库连接测试成功")
        
        # 关闭数据库连接
        await close_database()
        logger.info("✅ 数据库连接关闭成功")
        
        return True
        
    except Exception as e:
        logger.error(f"❌ 数据库连接测试失败: {e}")
        import traceback
        traceback.print_exc()
        return False

async def create_test_data():
    """创建测试数据"""
    try:
        from src.data.models import Customer
        from src.web.services.customer_service import AsyncCustomerService
        from src.web.core.database import init_database, get_db
        from datetime import datetime
        
        logger.info("📝 创建测试数据...")
        
        # 初始化数据库
        await init_database()
        
        # 这里可以添加一些测试数据
        logger.info("✅ 测试数据创建完成")
        
        return True
        
    except Exception as e:
        logger.error(f"❌ 创建测试数据失败: {e}")
        import traceback
        traceback.print_exc()
        return False

async def main():
    """主函数"""
    print("="*60)
    print("🏗️  CRM Web数据库初始化工具")
    print("="*60)
    
    # 1. 初始化数据库表结构
    success = await init_database()
    if not success:
        print("❌ 数据库初始化失败，程序退出")
        return False
    
    # 2. 测试数据库连接
    success = await test_database()
    if not success:
        print("❌ 数据库连接测试失败")
        return False
    
    # 3. 创建测试数据（可选）
    try:
        await create_test_data()
    except Exception as e:
        logger.warning(f"⚠️  测试数据创建跳过: {e}")
    
    print("="*60)
    print("✅ 数据库初始化完成！")
    print("📁 数据库文件: ./data/crm.db")
    print("🚀 现在可以启动Web服务: python3 start_backend.py")
    print("="*60)
    
    return True

if __name__ == "__main__":
    try:
        result = asyncio.run(main())
        sys.exit(0 if result else 1)
    except KeyboardInterrupt:
        print("\n👋 初始化已取消")
        sys.exit(1)
    except Exception as e:
        logger.error(f"❌ 程序异常: {e}")
        sys.exit(1)